package com.dkm.biz.gl.repository.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Repository;

import com.dkm.base.api.model.Page;
import com.dkm.base.core.helper.SpringHelper;
import com.dkm.base.db.persistence.dao.IQueryDao;
import com.dkm.biz.gl.domain.EavAttribute;
import com.dkm.biz.gl.persistence.dao.EavAttributeQueryDao;
import com.dkm.biz.gl.persistence.entity.EavAttrOptionPo;
import com.dkm.biz.gl.persistence.entity.EavAttributePo;
import com.dkm.biz.gl.persistence.entity.EavValueVarcharPo;
import com.dkm.biz.gl.repository.EavAttrOptionRepository;
import com.dkm.biz.gl.repository.EavAttributeRepository;
import com.dkm.biz.gl.repository.EavValueVarcharRepository;
import com.dkm.biz.repository.AbstractRepository;

/**
 * 对象功能:属性 Repository接口的实现类
 * 开发公司:SKG.COM
 * 开发人员:Yuki
 * 创建时间:2014-12-11 10:47:53
 */
@Repository
public class EavAttributeRepositoryImpl extends AbstractRepository<String, EavAttributePo,EavAttribute> implements EavAttributeRepository{
	  
	@Resource
	private  EavAttributeQueryDao eavAttributeQueryDao;
	@Resource
	private EavAttrOptionRepository eavAttrOptionRepository;
	@Resource
	private EavValueVarcharRepository eavValueVarcharRepository;

	public EavAttribute newInstance() {
		EavAttributePo po = new EavAttributePo();
		EavAttribute eavAttribute = SpringHelper.getBean(EavAttribute.class);
		eavAttribute.setData(po);
		return eavAttribute;
	}

	public EavAttribute newInstance(EavAttributePo po) {
		EavAttribute eavAttribute = SpringHelper.getBean(EavAttribute.class);
		eavAttribute.setData(po);
		return eavAttribute;
	} 
	
	@Override
	protected IQueryDao<String, EavAttributePo> getQueryDao() {
		return eavAttributeQueryDao;
	}
	
	 public List<EavAttributePo> findByAttrNamePaged(String attrName,Page page){
		 Map<String,Object> params = new HashMap<String,Object>();
		 params.put("whereSql","name_ like '%"+attrName+"%'");
		 List<EavAttributePo> eavAttributePoList = super.findPaged(params, page);
		 return eavAttributePoList;
	 }
	 
	 public Integer countByName(String attrName){
		 return eavAttributeQueryDao.countByName(attrName);
	 }

	@Override
	public EavAttributePo findEavAttributePoByKey(String attrKey) {
		 Map<String,Object> params = new HashMap<String,Object>();
		 params.put("attrKey", attrKey);
		return  eavAttributeQueryDao.getByKey("findByKey", params);
	}

	@Override
	public List<EavAttributePo> findBySetKey(String eavSetKey) {
		 Map<String,Object> params = new HashMap<String,Object>();
		 params.put("eavSetKey", eavSetKey);
		return  eavAttributeQueryDao.findByKey("findBySetKey", params);
	}

	@Override
	public List<EavAttributePo> findByEavSetKey(String eavSetKey, String isMain,String bizType) {
		 Map<String,Object> params = new HashMap<String,Object>();
		 params.put("eavSetKey", eavSetKey);
		 params.put("isMain", isMain);
		 params.put("bizType", bizType);
		return  eavAttributeQueryDao.findByKey("findByEavSetKey", params);
	}

	@Override
	public EavAttributePo getEavValue(EavAttributePo eavAttributePo,String key) {
		  String dataType = eavAttributePo.getDataType();
		   if("options".equals(dataType)){
    		   List<EavAttrOptionPo> eavAttrOptionPos = eavAttrOptionRepository.findByAttrId(eavAttributePo.getId());
        	  /* List<EavAttrOptionView> eavAttrOptionViews = eavAttrOptionViewConverter.converter(eavAttrOptionPos);
        	   eavAttributeView.setEavAttrOptionViews(eavAttrOptionViews);*/
    		   eavAttributePo.setEavAttrOptionPoList(eavAttrOptionPos);  
    	   }else if("varchar".equals(dataType)){
    		   EavValueVarcharPo vavValueVarcharPo = eavValueVarcharRepository.findByProdAttr(key, eavAttributePo.getId());
    		   if(vavValueVarcharPo != null){
    			   eavAttributePo.setAttrValue(vavValueVarcharPo.getValue());
    		   }
    		  
    	   }
		return eavAttributePo;
	}
	
}
